#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<cstdlib>
#include"ringQueue.hpp"
using namespace bit;
//消费线程要做的事情：
void* Consumer(void* argc)
{
    ringQueue<int>* rq = (ringQueue<int>*)argc;
    while (true)
    {
        sleep(1);
        //c.1 取数据：
        int data = 0;
        rq->pop(&data);

        // c.2 处理数据：
        std::cout << "Consumer->get a data " << data << ". Its square number is " << data * data << std::endl;
    }
    
    return nullptr;
}
//生产线程要做的事情：
void* Productor(void* argc)
{
    srand(time(nullptr));
    ringQueue<int>* rq = (ringQueue<int>*)argc;
    while(true)
    {
        //p.1 构建数据：
        int data = rand() % 100 + 1;

        //p.2 
        rq->push(data);
        std::cout << "Productor->" << data << std::endl;
    }
    return nullptr;
}
int main()
{
    //1.创建环形队列：
    ringQueue<int>* rq = new ringQueue<int>; 

    //2.创建线程：
    pthread_t c1, c2, p1;
    pthread_create(&c1, 0, Consumer, (void*)rq);
    pthread_create(&c2, 0, Consumer, (void*)rq);
    pthread_create(&p1, 0, Productor, (void*)rq);

    //3.等待线程：
    pthread_join(c1, nullptr);
    pthread_join(c2, nullptr);
    pthread_join(p1, nullptr);

    delete rq;
    return 0;
}